package com.cs.beneficios.business.entity;

import com.cs.beneficios.business.model.CondicionConsultaVO;
import com.cs.beneficios.business.model.RepAtributoVO;
import com.cs.beneficios.business.model.RepDetBOTVO;
//import com.cs.beneficios.business.model.RepDetBeneficiarioVO;
import com.cs.beneficios.business.model.ReporteDetVO;
import com.cs.beneficios.common.ConnectionFactory;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

//import java.sql.Types;

import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
//import java.util.Vector;

import oracle.jdbc.OracleTypes;

public class RepDetBOTDAO {
	/**
	 * Conexion a la base de datos.
	 */
	private Connection conn = null;
	private Connection conn1 = null;
	private ConnectionFactory cf;
	private boolean checkFiltersEsp = false;
	private boolean checkFiltersGen = false;

	/**
	 * Constructor que inicializa la conexion con la base de datos.
	 * 
	 * @param conn
	 *            Conexion con la base de datos.
	 */

	public RepDetBOTDAO(ConnectionFactory cf) {
		this.cf = cf;
	}

	public Object clone() {
		Object clone = null;
		try {
			clone = super.clone();
		} catch (CloneNotSupportedException e) {
			// No deberia suceder
		}
		return clone;
	}

	/*
	 * public int getCantidadBeneOtorg (RepDetBOTVO criterea) throws
	 * SQLException { int cantidad = 0; try { conn = cf.getConnection(); String
	 * query =
	 * "SELECT COUNT(1) FROM (SELECT prog.nombre programa, sub.codigo codSubprograma, "
	 * + "       sub.nombre subprograma, sede.codigo codSede, "+
	 * "       sede.nombre sede, bot1.codigo codBot, bot1.ben_codigo codBen,  "+
	 * "       to_char(bot1.FECHA_BENEFICIO ,'dd/mm/RRRR') fecha "+
	 * "FROM tcs_ben_beneficio_otorgado bot1, "+
	 * "        tcs_ben_subprograma sub, "+ "        tcs_ben_programa prog, "+
	 * "        tcs_ben_sede sede "+ "WHERE   sub.codigo = bot1.sbpr_codigo "+
	 * "         AND prog.codigo = sub.prg_codigo "+
	 * "         AND sede.codigo = bot1.sede_codigo "+
	 * "         AND bot1.FECHA_BENEFICIO <= sysdate" ;
	 * 
	 * if((Object)criterea.getCodeSede() != null) { query +=
	 * " AND sede.CODIGO = "+criterea.getCodeSede(); }
	 * if((Object)criterea.getCodeSubprograma() != null) { query +=
	 * " AND sub.CODIGO = "+criterea.getCodeSubprograma(); }
	 * if((Object)criterea.getDesde() != null && (Object)criterea.getHasta() !=
	 * null) { query +=
	 * " AND bot1.FECHA_BENEFICIO between to_date('"+criterea.getDesde
	 * ()+"','dd/mm/rrrr') and to_date('"+criterea.getHasta()+"','dd/mm/rrrr')";
	 * }
	 * 
	 * query += " ORDER BY prog.NOMBRE,sub.NOMBRE,sede.NOMBRE) ";
	 * 
	 * ResultSet rst = cf.getRecordsRset(query,null,conn);
	 * 
	 * rst.next();
	 * 
	 * cantidad = rst.getInt(1);
	 * 
	 * rst.close(); cf.closeConnection(conn); }catch(SQLException e) {
	 * e.printStackTrace(); } return cantidad; }
	 */

	/*
	 * public List getListaRepoteBeneOtorg (RepDetBOTVO criterea) throws
	 * SQLException { List lListaBeneOtorg = new LinkedList(); try { conn =
	 * cf.getConnection(); String query =
	 * "SELECT prog.nombre programa, sub.codigo codSubprograma, "+
	 * "       sub.nombre subprograma, sede.codigo codSede, "+
	 * "       sede.nombre sede, bot1.codigo codBot, bot1.ben_codigo codBen,  "+
	 * "       to_char(bot1.FECHA_BENEFICIO ,'dd/mm/RRRR') fecha "+
	 * "FROM tcs_ben_beneficio_otorgado bot1, "+
	 * "        tcs_ben_subprograma sub, "+ "        tcs_ben_programa prog, "+
	 * "        tcs_ben_sede sede "+ "WHERE   sub.codigo = bot1.sbpr_codigo "+
	 * "         AND prog.codigo = sub.prg_codigo "+
	 * "         AND sede.codigo = bot1.sede_codigo "+
	 * "         AND bot1.FECHA_BENEFICIO <= sysdate" ;
	 * 
	 * if((Object)criterea.getCodeSede() != null) { query +=
	 * " AND sede.CODIGO = "+criterea.getCodeSede(); }
	 * if((Object)criterea.getCodeSubprograma() != null) { query +=
	 * " AND sub.CODIGO = "+criterea.getCodeSubprograma(); }
	 * if((Object)criterea.getDesde() != null && (Object)criterea.getHasta() !=
	 * null) { query +=
	 * " AND bot1.FECHA_BENEFICIO between to_date('"+criterea.getDesde
	 * ()+"','dd/mm/rrrr') and to_date('"+criterea.getHasta()+"','dd/mm/rrrr')";
	 * } RepDetBeneficiarioVO objBeneficioOtorg = null; ResultSet rst =
	 * cf.getRecordsRset(query,null,conn);
	 * 
	 * while(rst.next()) { objBeneficioOtorg = new RepDetBeneficiarioVO();
	 * 
	 * objBeneficioOtorg.setNombrePrograma(rst.getString("programa"));
	 * objBeneficioOtorg.setCodeSubprograma(new
	 * Long(rst.getLong("codSubprograma")));
	 * objBeneficioOtorg.setNombreSubprograma(rst.getString("subprograma"));
	 * objBeneficioOtorg.setNombreSede(rst.getString("sede"));
	 * objBeneficioOtorg.setFechabeneotorgado(rst.getString("fecha"));
	 * objBeneficioOtorg.setCodebenotorgado(new Long(rst.getLong("codBot")));
	 * objBeneficioOtorg.setCodebeneficiario(new Long(rst.getString("codBen")));
	 * objBeneficioOtorg.setCodeSede(new Long(rst.getLong("codSede")));
	 * 
	 * lListaBeneOtorg.add(objBeneficioOtorg); objBeneficioOtorg = null;
	 * 
	 * } rst.close(); cf.closeConnection(conn); }catch(SQLException e) {
	 * e.printStackTrace(); } return lListaBeneOtorg; }
	 */

	public Collection getReporte(List atributosGenericos,
			List atributosEspecificos, List filtros, ConnectionFactory cf,
			RepDetBOTVO criterea) throws SQLException {
		Collection beneficiarios = new LinkedList();
		List latributosEspecificos = atributosEspecificos;
		List latributosGenericos = atributosGenericos;

		RepAtributoVO atrVO = null;

		cf.closeConnection(conn);

		String atriGenerales = null;
		String atriEspecificos = null;
		String codiEspecificos = null;
		String filtrosGenerales = "'" + checkFiltros((Collection) filtros)
				+ "'";
		String filtrosEspecificos = null;
		if (criterea.getCodigoAtrGestor() != null
				&& criterea.getGestor() != null) {
			filtrosEspecificos = "'"
					+ checkFiltrosEspecificos((Collection) filtros)
					+ " AND NVL(Fcs_Ben_Valor_Atributo("
					+ criterea.getCodigoAtrGestor()
					+ ", "
					+ " bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') = TO_CHAR(''"
					+ criterea.getGestor() + "'')'";
		} else {
			filtrosEspecificos = "'"
					+ checkFiltrosEspecificos((Collection) filtros) + "'";
		}

		int tamanolatriEsp = latributosEspecificos.size();
		String Desde = criterea.getDesde();
		String Hasta = criterea.getHasta();

		if (Desde != null) {
			Desde = "'" + Desde + "'";
		}
		if (Hasta != null) {
			Hasta = "'" + Hasta + "'";
		}

		if (latributosGenericos.size() > 0) {
			atriGenerales = "";

			for (int i = 0; i < latributosGenericos.size(); i++) {
				atrVO = (RepAtributoVO) latributosGenericos.get(i);

				atriGenerales += atrVO.getNombre() + "|";
			}

			atriGenerales = "'" + atriGenerales + "'";
		}

		if (tamanolatriEsp > 0) {
			codiEspecificos = "";
			atriEspecificos = "";

			for (int i = 0; i < tamanolatriEsp; i++) {
				atrVO = (RepAtributoVO) latributosEspecificos.get(i);

				codiEspecificos += atrVO.getCodigo() + "|";
				atriEspecificos += " CAMPO" + (i + 1) + " ";
			}

			codiEspecificos = "'" + codiEspecificos + "'";
		}

		conn = cf.getConnection();

		/*
		 * System.err.println("call beneficios.PCS_REPORTE_BENEFICIO_OTORGADO");
		 * System.err.println("atrigenerales " + atriGenerales);
		 * System.err.println("filtrosgenerales " + filtrosGenerales);
		 * System.err.println("filtrosespecificos " + filtrosEspecificos);
		 * System.err.println("sede " + criterea.getCodeSede());
		 * System.err.println("subprograma " + criterea.getCodeSubprograma());
		 */

		String strSql = "{call beneficios.PCS_REPORTE_BENEFICIO_OTORGADO("
				+ atriGenerales + ", " + tamanolatriEsp + ", "
				+ codiEspecificos + "," + "" + filtrosGenerales + ","
				+ filtrosEspecificos + ", " + criterea.getCodeSede() + ", "
				+ criterea.getCodeSubprograma() + ", " + Desde + ", " + Hasta
				+ ", ?)}";
		// System.out.println("PCS_REPORTE_BENEFICIO_OTORGADO: " + strSql);
		CallableStatement stmt = conn.prepareCall(strSql);
		stmt.registerOutParameter(1, OracleTypes.CURSOR);
		stmt.execute();

		ResultSet rst = (ResultSet) stmt.getObject(1);
		ReporteDetVO reporteDetVO = null;

		while (rst.next()) {
			reporteDetVO = new ReporteDetVO();
			if (atriGenerales != null) {
				if (atriGenerales.indexOf("TIPO_DOCUMENTO") != -1) {
					reporteDetVO.setTipoDocumento(rst
							.getString("TIPO_DOCUMENTO"));
				}
				if (atriGenerales.indexOf("NUMERO_DOCUMENTO") != -1) {
					reporteDetVO.setNumeroDocumento(rst
							.getString("NUMERO_DOCUMENTO"));
				}
				if (atriGenerales.indexOf("PRIMER_NOMBRE") != -1) {
					reporteDetVO
							.setPrimerNombre(rst.getString("PRIMER_NOMBRE"));
				}
				if (atriGenerales.indexOf("SEGUNDO_NOMBRE") != -1) {
					reporteDetVO.setSegundoNombre(rst
							.getString("SEGUNDO_NOMBRE"));
				}
				if (atriGenerales.indexOf("PRIMER_APELLIDO") != -1) {
					reporteDetVO.setPrimerApellido(rst
							.getString("PRIMER_APELLIDO"));
				}
				if (atriGenerales.indexOf("SEGUNDO_APELLIDO") != -1) {
					reporteDetVO.setSegundoApellido(rst
							.getString("SEGUNDO_APELLIDO"));
				}
				if (atriGenerales.indexOf("DIRECCION_DESCRIPTIVA") != -1) {
					reporteDetVO.setDirDescriptiva(rst
							.getString("DIRECCION_DESCRIPTIVA"));
				}
				if (atriGenerales.indexOf("DIRECCION_ENCASILLADA") != -1) {
					reporteDetVO.setDirEncasillada(rst
							.getString("DIRECCION_ENCASILLADA"));
				}
				if (atriGenerales.indexOf("SEXO") != -1) {
					reporteDetVO.setSexo(rst.getString("SEXO"));
				}
				if (atriGenerales.indexOf("FECHA_NACIMIENTO") != -1) {
					reporteDetVO.setFechaNacimiento(rst
							.getString("FECHA_NACIMIENTO"));
				}
				if (atriGenerales.indexOf("VFL_CODIGO_COMUNA") != -1) {
					reporteDetVO.setComunaCorregimiento(rst
							.getString("VFL_CODIGO_COMUNA"));
				}
				if (atriGenerales.indexOf("VFL_CODIGO_ZONA") != -1) {
					reporteDetVO.setZona(rst.getString("VFL_CODIGO_ZONA"));
				}
				if (atriGenerales.indexOf("LOCALIZACION_COBAMA") != -1) {
					reporteDetVO.setLocalizacion(rst
							.getString("LOCALIZACION_COBAMA"));
				}
				if (atriGenerales.indexOf("VFL_CODIGO_BARRIO") != -1) {
					reporteDetVO.setBarrioVereda(rst
							.getString("VFL_CODIGO_BARRIO"));
				}
				if (atriGenerales.indexOf("TELEFONO") != -1) {
					reporteDetVO.setTelefono(rst.getString("TELEFONO"));
				}
				if (atriGenerales.indexOf("ETNIA") != -1) {
					reporteDetVO.setEtnia(rst.getString("ETNIA"));
				}
				if (atriGenerales.indexOf("CORREO_ELECTRONICO") != -1) {
					reporteDetVO.setCorreElectronico(rst
							.getString("CORREO_ELECTRONICO"));
				}
				if (atriGenerales.indexOf("FICHA_SISBEN") != -1) {
					reporteDetVO.setFichaSisben(rst.getString("FICHA_SISBEN"));
				}
				if (atriGenerales.indexOf("HOGAR_SISBEN") != -1) {
					reporteDetVO.setHogarSisben(rst.getString("HOGAR_SISBEN"));
				}
				if (atriGenerales.indexOf("ORDEN_SISBEN") != -1) {
					reporteDetVO.setOrdenSisben(rst.getString("ORDEN_SISBEN"));
				}
				if (atriGenerales.indexOf("NIVEL_SISBEN") != -1) {
					reporteDetVO.setNivelSisben(rst.getString("NIVEL_SISBEN"));
				}
				if (atriGenerales.indexOf("PUNTAJE_SISBEN") != -1) {
					reporteDetVO.setPuntajeSisben(rst
							.getString("PUNTAJE_SISBEN"));
				}
				if (atriGenerales.indexOf("FE_ENCUESTA_SISBEN") != -1) {
					reporteDetVO.setFechaEncuesta(rst
							.getString("FE_ENCUESTA_SISBEN"));
				}
				if (atriGenerales.indexOf("DISCAPACIDAD_SISBEN") != -1) {
					reporteDetVO.setDiscapacidad(rst
							.getString("DISCAPACIDAD_SISBEN"));
				}
				if (atriGenerales.indexOf("EDAD") != -1) {
					reporteDetVO.setEdad(rst.getString("EDAD"));
				}
			}
			if (codiEspecificos != null) {
				/*
				 * La division en condicionales teniendo en cuenta el tamano de
				 * la lista de atributos especificos se hace con el objetivo de
				 * minimizar el numero de comparaciones
				 */
				if (tamanolatriEsp <= 50 || tamanolatriEsp >= 50) {
					if (atriEspecificos.indexOf("CAMPO1") != -1) {
						reporteDetVO.setCampo1(rst.getString("CAMPO1"));
					}
					if (atriEspecificos.indexOf("CAMPO2") != -1) {
						reporteDetVO.setCampo2(rst.getString("CAMPO2"));
					}
					if (atriEspecificos.indexOf("CAMPO3") != -1) {
						reporteDetVO.setCampo3(rst.getString("CAMPO3"));
					}
					if (atriEspecificos.indexOf("CAMPO4") != -1) {
						reporteDetVO.setCampo4(rst.getString("CAMPO4"));
					}
					if (atriEspecificos.indexOf("CAMPO5") != -1) {
						reporteDetVO.setCampo5(rst.getString("CAMPO5"));
					}
					if (atriEspecificos.indexOf("CAMPO6") != -1) {
						reporteDetVO.setCampo6(rst.getString("CAMPO6"));
					}
					if (atriEspecificos.indexOf("CAMPO7") != -1) {
						reporteDetVO.setCampo7(rst.getString("CAMPO7"));
					}
					if (atriEspecificos.indexOf("CAMPO8") != -1) {
						reporteDetVO.setCampo8(rst.getString("CAMPO8"));
					}
					if (atriEspecificos.indexOf("CAMPO9") != -1) {
						reporteDetVO.setCampo9(rst.getString("CAMPO9"));
					}
					if (atriEspecificos.indexOf("CAMPO10") != -1) {
						reporteDetVO.setCampo10(rst.getString("CAMPO10"));
					}

					if (tamanolatriEsp > 10) {
						if (atriEspecificos.indexOf("CAMPO11") != -1) {
							reporteDetVO.setCampo11(rst.getString("CAMPO11"));
						}
						if (atriEspecificos.indexOf("CAMPO12") != -1) {
							reporteDetVO.setCampo12(rst.getString("CAMPO12"));
						}
						if (atriEspecificos.indexOf("CAMPO13") != -1) {
							reporteDetVO.setCampo13(rst.getString("CAMPO13"));
						}
						if (atriEspecificos.indexOf("CAMPO14") != -1) {
							reporteDetVO.setCampo14(rst.getString("CAMPO14"));
						}
						if (atriEspecificos.indexOf("CAMPO15") != -1) {
							reporteDetVO.setCampo15(rst.getString("CAMPO15"));
						}
						if (atriEspecificos.indexOf("CAMPO16") != -1) {
							reporteDetVO.setCampo16(rst.getString("CAMPO16"));
						}
						if (atriEspecificos.indexOf("CAMPO17") != -1) {
							reporteDetVO.setCampo17(rst.getString("CAMPO17"));
						}
						if (atriEspecificos.indexOf("CAMPO18") != -1) {
							reporteDetVO.setCampo18(rst.getString("CAMPO18"));
						}
						if (atriEspecificos.indexOf("CAMPO19") != -1) {
							reporteDetVO.setCampo19(rst.getString("CAMPO19"));
						}
						if (atriEspecificos.indexOf("CAMPO20") != -1) {
							reporteDetVO.setCampo20(rst.getString("CAMPO20"));
						}
					}
					if (tamanolatriEsp > 20) {
						if (atriEspecificos.indexOf("CAMPO21") != -1) {
							reporteDetVO.setCampo21(rst.getString("CAMPO21"));
						}
						if (atriEspecificos.indexOf("CAMPO22") != -1) {
							reporteDetVO.setCampo22(rst.getString("CAMPO22"));
						}
						if (atriEspecificos.indexOf("CAMPO23") != -1) {
							reporteDetVO.setCampo23(rst.getString("CAMPO23"));
						}
						if (atriEspecificos.indexOf("CAMPO24") != -1) {
							reporteDetVO.setCampo24(rst.getString("CAMPO24"));
						}
						if (atriEspecificos.indexOf("CAMPO25") != -1) {
							reporteDetVO.setCampo25(rst.getString("CAMPO25"));
						}
						if (atriEspecificos.indexOf("CAMPO26") != -1) {
							reporteDetVO.setCampo26(rst.getString("CAMPO26"));
						}
						if (atriEspecificos.indexOf("CAMPO27") != -1) {
							reporteDetVO.setCampo27(rst.getString("CAMPO27"));
						}
						if (atriEspecificos.indexOf("CAMPO28") != -1) {
							reporteDetVO.setCampo28(rst.getString("CAMPO28"));
						}
						if (atriEspecificos.indexOf("CAMPO29") != -1) {
							reporteDetVO.setCampo29(rst.getString("CAMPO29"));
						}
						if (atriEspecificos.indexOf("CAMPO30") != -1) {
							reporteDetVO.setCampo30(rst.getString("CAMPO30"));
						}
					}
					if (tamanolatriEsp > 30) {
						if (atriEspecificos.indexOf("CAMPO31") != -1) {
							reporteDetVO.setCampo31(rst.getString("CAMPO31"));
						}
						if (atriEspecificos.indexOf("CAMPO32") != -1) {
							reporteDetVO.setCampo32(rst.getString("CAMPO32"));
						}
						if (atriEspecificos.indexOf("CAMPO33") != -1) {
							reporteDetVO.setCampo33(rst.getString("CAMPO33"));
						}
						if (atriEspecificos.indexOf("CAMPO34") != -1) {
							reporteDetVO.setCampo34(rst.getString("CAMPO34"));
						}
						if (atriEspecificos.indexOf("CAMPO35") != -1) {
							reporteDetVO.setCampo35(rst.getString("CAMPO35"));
						}
						if (atriEspecificos.indexOf("CAMPO36") != -1) {
							reporteDetVO.setCampo36(rst.getString("CAMPO36"));
						}
						if (atriEspecificos.indexOf("CAMPO37") != -1) {
							reporteDetVO.setCampo37(rst.getString("CAMPO37"));
						}
						if (atriEspecificos.indexOf("CAMPO38") != -1) {
							reporteDetVO.setCampo38(rst.getString("CAMPO38"));
						}
						if (atriEspecificos.indexOf("CAMPO39") != -1) {
							reporteDetVO.setCampo39(rst.getString("CAMPO39"));
						}
						if (atriEspecificos.indexOf("CAMPO40") != -1) {
							reporteDetVO.setCampo40(rst.getString("CAMPO40"));
						}
					}
					if (tamanolatriEsp > 40) {
						if (atriEspecificos.indexOf("CAMPO41") != -1) {
							reporteDetVO.setCampo41(rst.getString("CAMPO41"));
						}
						if (atriEspecificos.indexOf("CAMPO42") != -1) {
							reporteDetVO.setCampo42(rst.getString("CAMPO42"));
						}
						if (atriEspecificos.indexOf("CAMPO43") != -1) {
							reporteDetVO.setCampo43(rst.getString("CAMPO43"));
						}
						if (atriEspecificos.indexOf("CAMPO44") != -1) {
							reporteDetVO.setCampo44(rst.getString("CAMPO44"));
						}
						if (atriEspecificos.indexOf("CAMPO45") != -1) {
							reporteDetVO.setCampo45(rst.getString("CAMPO45"));
						}
						if (atriEspecificos.indexOf("CAMPO46") != -1) {
							reporteDetVO.setCampo46(rst.getString("CAMPO46"));
						}
						if (atriEspecificos.indexOf("CAMPO47") != -1) {
							reporteDetVO.setCampo47(rst.getString("CAMPO47"));
						}
						if (atriEspecificos.indexOf("CAMPO48") != -1) {
							reporteDetVO.setCampo48(rst.getString("CAMPO48"));
						}
						if (atriEspecificos.indexOf("CAMPO49") != -1) {
							reporteDetVO.setCampo49(rst.getString("CAMPO49"));
						}
						if (atriEspecificos.indexOf("CAMPO50") != -1) {
							reporteDetVO.setCampo50(rst.getString("CAMPO50"));
						}
					}
				}
				if (tamanolatriEsp > 50) {
					if (atriEspecificos.indexOf("CAMPO51") != -1) {
						reporteDetVO.setCampo51(rst.getString("CAMPO51"));
					}
					if (atriEspecificos.indexOf("CAMPO52") != -1) {
						reporteDetVO.setCampo52(rst.getString("CAMPO52"));
					}
					if (atriEspecificos.indexOf("CAMPO53") != -1) {
						reporteDetVO.setCampo53(rst.getString("CAMPO53"));
					}
					if (atriEspecificos.indexOf("CAMPO54") != -1) {
						reporteDetVO.setCampo54(rst.getString("CAMPO54"));
					}
					if (atriEspecificos.indexOf("CAMPO55") != -1) {
						reporteDetVO.setCampo55(rst.getString("CAMPO55"));
					}
					if (atriEspecificos.indexOf("CAMPO56") != -1) {
						reporteDetVO.setCampo56(rst.getString("CAMPO56"));
					}
					if (atriEspecificos.indexOf("CAMPO57") != -1) {
						reporteDetVO.setCampo57(rst.getString("CAMPO57"));
					}
					if (atriEspecificos.indexOf("CAMPO58") != -1) {
						reporteDetVO.setCampo58(rst.getString("CAMPO58"));
					}
					if (atriEspecificos.indexOf("CAMPO59") != -1) {
						reporteDetVO.setCampo59(rst.getString("CAMPO59"));
					}
					if (atriEspecificos.indexOf("CAMPO60") != -1) {
						reporteDetVO.setCampo60(rst.getString("CAMPO60"));
					}

					if (tamanolatriEsp > 60) {
						if (atriEspecificos.indexOf("CAMPO61") != -1) {
							reporteDetVO.setCampo61(rst.getString("CAMPO61"));
						}
						if (atriEspecificos.indexOf("CAMPO62") != -1) {
							reporteDetVO.setCampo62(rst.getString("CAMPO62"));
						}
						if (atriEspecificos.indexOf("CAMPO63") != -1) {
							reporteDetVO.setCampo63(rst.getString("CAMPO63"));
						}
						if (atriEspecificos.indexOf("CAMPO64") != -1) {
							reporteDetVO.setCampo64(rst.getString("CAMPO64"));
						}
						if (atriEspecificos.indexOf("CAMPO65") != -1) {
							reporteDetVO.setCampo65(rst.getString("CAMPO65"));
						}
						if (atriEspecificos.indexOf("CAMPO66") != -1) {
							reporteDetVO.setCampo66(rst.getString("CAMPO66"));
						}
						if (atriEspecificos.indexOf("CAMPO67") != -1) {
							reporteDetVO.setCampo67(rst.getString("CAMPO67"));
						}
						if (atriEspecificos.indexOf("CAMPO68") != -1) {
							reporteDetVO.setCampo68(rst.getString("CAMPO68"));
						}
						if (atriEspecificos.indexOf("CAMPO69") != -1) {
							reporteDetVO.setCampo69(rst.getString("CAMPO69"));
						}
						if (atriEspecificos.indexOf("CAMPO70") != -1) {
							reporteDetVO.setCampo70(rst.getString("CAMPO70"));
						}
					}
					if (tamanolatriEsp > 70) {
						if (atriEspecificos.indexOf("CAMPO71") != -1) {
							reporteDetVO.setCampo71(rst.getString("CAMPO71"));
						}
						if (atriEspecificos.indexOf("CAMPO72") != -1) {
							reporteDetVO.setCampo72(rst.getString("CAMPO72"));
						}
						if (atriEspecificos.indexOf("CAMPO73") != -1) {
							reporteDetVO.setCampo73(rst.getString("CAMPO73"));
						}
						if (atriEspecificos.indexOf("CAMPO74") != -1) {
							reporteDetVO.setCampo74(rst.getString("CAMPO74"));
						}
						if (atriEspecificos.indexOf("CAMPO75") != -1) {
							reporteDetVO.setCampo75(rst.getString("CAMPO75"));
						}
						if (atriEspecificos.indexOf("CAMPO76") != -1) {
							reporteDetVO.setCampo76(rst.getString("CAMPO76"));
						}
						if (atriEspecificos.indexOf("CAMPO77") != -1) {
							reporteDetVO.setCampo77(rst.getString("CAMPO77"));
						}
						if (atriEspecificos.indexOf("CAMPO78") != -1) {
							reporteDetVO.setCampo78(rst.getString("CAMPO78"));
						}
						if (atriEspecificos.indexOf("CAMPO79") != -1) {
							reporteDetVO.setCampo79(rst.getString("CAMPO79"));
						}
						if (atriEspecificos.indexOf("CAMPO80") != -1) {
							reporteDetVO.setCampo80(rst.getString("CAMPO80"));
						}
					}
					if (tamanolatriEsp > 80) {
						if (atriEspecificos.indexOf("CAMPO81") != -1) {
							reporteDetVO.setCampo81(rst.getString("CAMPO81"));
						}
						if (atriEspecificos.indexOf("CAMPO82") != -1) {
							reporteDetVO.setCampo82(rst.getString("CAMPO82"));
						}
						if (atriEspecificos.indexOf("CAMPO83") != -1) {
							reporteDetVO.setCampo83(rst.getString("CAMPO83"));
						}
						if (atriEspecificos.indexOf("CAMPO84") != -1) {
							reporteDetVO.setCampo84(rst.getString("CAMPO84"));
						}
						if (atriEspecificos.indexOf("CAMPO85") != -1) {
							reporteDetVO.setCampo85(rst.getString("CAMPO85"));
						}
						if (atriEspecificos.indexOf("CAMPO86") != -1) {
							reporteDetVO.setCampo86(rst.getString("CAMPO86"));
						}
						if (atriEspecificos.indexOf("CAMPO87") != -1) {
							reporteDetVO.setCampo87(rst.getString("CAMPO87"));
						}
						if (atriEspecificos.indexOf("CAMPO88") != -1) {
							reporteDetVO.setCampo88(rst.getString("CAMPO88"));
						}
						if (atriEspecificos.indexOf("CAMPO89") != -1) {
							reporteDetVO.setCampo89(rst.getString("CAMPO89"));
						}
						if (atriEspecificos.indexOf("CAMPO90") != -1) {
							reporteDetVO.setCampo90(rst.getString("CAMPO90"));
						}
					}
					if (tamanolatriEsp > 90) {
						if (atriEspecificos.indexOf("CAMPO91") != -1) {
							reporteDetVO.setCampo91(rst.getString("CAMPO91"));
						}
						if (atriEspecificos.indexOf("CAMPO92") != -1) {
							reporteDetVO.setCampo92(rst.getString("CAMPO92"));
						}
						if (atriEspecificos.indexOf("CAMPO93") != -1) {
							reporteDetVO.setCampo93(rst.getString("CAMPO93"));
						}
						if (atriEspecificos.indexOf("CAMPO94") != -1) {
							reporteDetVO.setCampo94(rst.getString("CAMPO94"));
						}
						if (atriEspecificos.indexOf("CAMPO95") != -1) {
							reporteDetVO.setCampo95(rst.getString("CAMPO95"));
						}
						if (atriEspecificos.indexOf("CAMPO96") != -1) {
							reporteDetVO.setCampo96(rst.getString("CAMPO96"));
						}
						if (atriEspecificos.indexOf("CAMPO97") != -1) {
							reporteDetVO.setCampo97(rst.getString("CAMPO97"));
						}
						if (atriEspecificos.indexOf("CAMPO98") != -1) {
							reporteDetVO.setCampo98(rst.getString("CAMPO98"));
						}
						if (atriEspecificos.indexOf("CAMPO99") != -1) {
							reporteDetVO.setCampo99(rst.getString("CAMPO99"));
						}
						if (atriEspecificos.indexOf("CAMPO100") != -1) {
							reporteDetVO.setCampo100(rst.getString("CAMPO100"));
						}
					}
				}
			}

			reporteDetVO.setFechaBeneficio(rst.getString("FECHA_BENEFICIO"));
			reporteDetVO.setValor(rst.getInt("VALOR"));
			reporteDetVO.setTercero(rst.getString("TERCERO"));

			// ADICION
			// ATRIBUTOS!!!!!----------------------------------------------------------
			reporteDetVO.setTipoBeneficio(rst.getString("TIPO_BENEFICIO"));

			beneficiarios.add(reporteDetVO);
		}

		cf.closeConnection(conn);
		conn = null;

		return beneficiarios;
	}

	public Collection getReporteConGestor(List atributosGenericos,
			List atributosEspecificos, List filtros, ConnectionFactory cf,
			RepDetBOTVO criterea) throws SQLException {
		Collection beneficiarios = new LinkedList();
		List latributosEspecificos = atributosEspecificos;
		List latributosGenericos = atributosGenericos;

		RepAtributoVO atrVO = null;

		cf.closeConnection(conn);

		String atriGenerales = null;
		String atriEspecificos = null;
		String codiEspecificos = null;
		String filtrosGenerales = "'" + checkFiltros((Collection) filtros)
				+ "'";
		String filtrosEspecificos = null;
		if (criterea.getCodigoAtrGestor() != null
				&& criterea.getGestor() != null) {
			filtrosEspecificos = "'"
					+ checkFiltrosEspecificos((Collection) filtros)
					+ " AND NVL(Fcs_Ben_Valor_Atributo("
					+ criterea.getCodigoAtrGestor()
					+ ", "
					+ " bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') = TO_CHAR(''"
					+ criterea.getGestor() + "'')'";
		} else {
			filtrosEspecificos = "'"
					+ checkFiltrosEspecificos((Collection) filtros) + "'";
		}

		int tamanolatriEsp = latributosEspecificos.size();
		String Desde = criterea.getDesde();
		String Hasta = criterea.getHasta();

		if (Desde != null) {
			Desde = "'" + Desde + "'";
		}
		if (Hasta != null) {
			Hasta = "'" + Hasta + "'";
		}

		if (latributosGenericos.size() > 0) {
			atriGenerales = "";

			for (int i = 0; i < latributosGenericos.size(); i++) {
				atrVO = (RepAtributoVO) latributosGenericos.get(i);

				atriGenerales += atrVO.getNombre() + "|";
			}

			atriGenerales = "'" + atriGenerales + "'";
		}

		if (tamanolatriEsp > 0) {
			codiEspecificos = "";
			atriEspecificos = "";

			for (int i = 0; i < tamanolatriEsp; i++) {
				atrVO = (RepAtributoVO) latributosEspecificos.get(i);

				codiEspecificos += atrVO.getCodigo() + "|";
				atriEspecificos += " CAMPO" + (i + 1) + " ";
			}

			codiEspecificos = "'" + codiEspecificos + "'";
		}

		conn = cf.getConnection();

		String strSql = "{call beneficios.PCS_REP_BENEFICIO_OTORGADOEG("
				+ atriGenerales + ", " + tamanolatriEsp + ", "
				+ codiEspecificos + "," + "" + filtrosGenerales + ","
				+ filtrosEspecificos + ", " + criterea.getCodeSede() + ", "
				+ criterea.getCodeSubprograma() + ", " + Desde + ", " + Hasta
				+ ", ?)}";
		// System.out.println("pcs_rep_beneficio_otorgadoEG: " + strSql);
		CallableStatement stmt = conn.prepareCall(strSql);
		stmt.registerOutParameter(1, OracleTypes.CURSOR);
		stmt.execute();

		ResultSet rst = (ResultSet) stmt.getObject(1);
		ReporteDetVO reporteDetVO = null;

		while (rst.next()) {
			reporteDetVO = new ReporteDetVO();
			if (atriGenerales != null) {
				if (atriGenerales.indexOf("TIPO_DOCUMENTO") != -1) {
					reporteDetVO.setTipoDocumento(rst
							.getString("TIPO_DOCUMENTO"));
				}
				if (atriGenerales.indexOf("NUMERO_DOCUMENTO") != -1) {
					reporteDetVO.setNumeroDocumento(rst
							.getString("NUMERO_DOCUMENTO"));
				}
				if (atriGenerales.indexOf("PRIMER_NOMBRE") != -1) {
					reporteDetVO
							.setPrimerNombre(rst.getString("PRIMER_NOMBRE"));
				}
				if (atriGenerales.indexOf("SEGUNDO_NOMBRE") != -1) {
					reporteDetVO.setSegundoNombre(rst
							.getString("SEGUNDO_NOMBRE"));
				}
				if (atriGenerales.indexOf("PRIMER_APELLIDO") != -1) {
					reporteDetVO.setPrimerApellido(rst
							.getString("PRIMER_APELLIDO"));
				}
				if (atriGenerales.indexOf("SEGUNDO_APELLIDO") != -1) {
					reporteDetVO.setSegundoApellido(rst
							.getString("SEGUNDO_APELLIDO"));
				}
				if (atriGenerales.indexOf("DIRECCION_DESCRIPTIVA") != -1) {
					reporteDetVO.setDirDescriptiva(rst
							.getString("DIRECCION_DESCRIPTIVA"));
				}
				if (atriGenerales.indexOf("DIRECCION_ENCASILLADA") != -1) {
					reporteDetVO.setDirEncasillada(rst
							.getString("DIRECCION_ENCASILLADA"));
				}
				if (atriGenerales.indexOf("SEXO") != -1) {
					reporteDetVO.setSexo(rst.getString("SEXO"));
				}
				if (atriGenerales.indexOf("FECHA_NACIMIENTO") != -1) {
					reporteDetVO.setFechaNacimiento(rst
							.getString("FECHA_NACIMIENTO"));
				}
				if (atriGenerales.indexOf("EDAD") != -1) {
					reporteDetVO.setEdad(rst.getString("EDAD"));
				}
				if (atriGenerales.indexOf("VFL_CODIGO_COMUNA") != -1) {
					reporteDetVO.setComunaCorregimiento(rst
							.getString("VFL_CODIGO_COMUNA"));
				}
				if (atriGenerales.indexOf("VFL_CODIGO_ZONA") != -1) {
					reporteDetVO.setZona(rst.getString("VFL_CODIGO_ZONA"));
				}
				if (atriGenerales.indexOf("LOCALIZACION_COBAMA") != -1) {
					reporteDetVO.setLocalizacion(rst
							.getString("LOCALIZACION_COBAMA"));
				}
				if (atriGenerales.indexOf("VFL_CODIGO_BARRIO") != -1) {
					reporteDetVO.setBarrioVereda(rst
							.getString("VFL_CODIGO_BARRIO"));
				}
				if (atriGenerales.indexOf("TELEFONO") != -1) {
					reporteDetVO.setTelefono(rst.getString("TELEFONO"));
				}
				if (atriGenerales.indexOf("ETNIA") != -1) {
					reporteDetVO.setEtnia(rst.getString("ETNIA"));
				}
				if (atriGenerales.indexOf("CORREO_ELECTRONICO") != -1) {
					reporteDetVO.setCorreElectronico(rst
							.getString("CORREO_ELECTRONICO"));
				}
				if (atriGenerales.indexOf("FICHA_SISBEN") != -1) {
					reporteDetVO.setFichaSisben(rst.getString("FICHA_SISBEN"));
				}
				if (atriGenerales.indexOf("HOGAR_SISBEN") != -1) {
					reporteDetVO.setHogarSisben(rst.getString("HOGAR_SISBEN"));
				}
				if (atriGenerales.indexOf("ORDEN_SISBEN") != -1) {
					reporteDetVO.setOrdenSisben(rst.getString("ORDEN_SISBEN"));
				}
				if (atriGenerales.indexOf("NIVEL_SISBEN") != -1) {
					reporteDetVO.setNivelSisben(rst.getString("NIVEL_SISBEN"));
				}
				if (atriGenerales.indexOf("PUNTAJE_SISBEN") != -1) {
					reporteDetVO.setPuntajeSisben(rst
							.getString("PUNTAJE_SISBEN"));
				}
				if (atriGenerales.indexOf("FE_ENCUESTA_SISBEN") != -1) {
					reporteDetVO.setFechaEncuesta(rst
							.getString("FE_ENCUESTA_SISBEN"));
				}
				if (atriGenerales.indexOf("DISCAPACIDAD_SISBEN") != -1) {
					reporteDetVO.setDiscapacidad(rst
							.getString("DISCAPACIDAD_SISBEN"));
				}
			}
			if (codiEspecificos != null) {
				/*
				 * La divisiï¿½n en condicionales teniendo en cuenta el
				 * tamaï¿½o de la lista de atributos especificos se hace con
				 * el objetivo de minimizar el nï¿½mero de comparaciones
				 */
				if (tamanolatriEsp <= 50 || tamanolatriEsp >= 50) {
					if (atriEspecificos.indexOf("CAMPO1") != -1) {
						reporteDetVO.setCampo1(rst.getString("CAMPO1"));
					}
					if (atriEspecificos.indexOf("CAMPO2") != -1) {
						reporteDetVO.setCampo2(rst.getString("CAMPO2"));
					}
					if (atriEspecificos.indexOf("CAMPO3") != -1) {
						reporteDetVO.setCampo3(rst.getString("CAMPO3"));
					}
					if (atriEspecificos.indexOf("CAMPO4") != -1) {
						reporteDetVO.setCampo4(rst.getString("CAMPO4"));
					}
					if (atriEspecificos.indexOf("CAMPO5") != -1) {
						reporteDetVO.setCampo5(rst.getString("CAMPO5"));
					}
					if (atriEspecificos.indexOf("CAMPO6") != -1) {
						reporteDetVO.setCampo6(rst.getString("CAMPO6"));
					}
					if (atriEspecificos.indexOf("CAMPO7") != -1) {
						reporteDetVO.setCampo7(rst.getString("CAMPO7"));
					}
					if (atriEspecificos.indexOf("CAMPO8") != -1) {
						reporteDetVO.setCampo8(rst.getString("CAMPO8"));
					}
					if (atriEspecificos.indexOf("CAMPO9") != -1) {
						reporteDetVO.setCampo9(rst.getString("CAMPO9"));
					}
					if (atriEspecificos.indexOf("CAMPO10") != -1) {
						reporteDetVO.setCampo10(rst.getString("CAMPO10"));
					}

					if (tamanolatriEsp > 10) {
						if (atriEspecificos.indexOf("CAMPO11") != -1) {
							reporteDetVO.setCampo11(rst.getString("CAMPO11"));
						}
						if (atriEspecificos.indexOf("CAMPO12") != -1) {
							reporteDetVO.setCampo12(rst.getString("CAMPO12"));
						}
						if (atriEspecificos.indexOf("CAMPO13") != -1) {
							reporteDetVO.setCampo13(rst.getString("CAMPO13"));
						}
						if (atriEspecificos.indexOf("CAMPO14") != -1) {
							reporteDetVO.setCampo14(rst.getString("CAMPO14"));
						}
						if (atriEspecificos.indexOf("CAMPO15") != -1) {
							reporteDetVO.setCampo15(rst.getString("CAMPO15"));
						}
						if (atriEspecificos.indexOf("CAMPO16") != -1) {
							reporteDetVO.setCampo16(rst.getString("CAMPO16"));
						}
						if (atriEspecificos.indexOf("CAMPO17") != -1) {
							reporteDetVO.setCampo17(rst.getString("CAMPO17"));
						}
						if (atriEspecificos.indexOf("CAMPO18") != -1) {
							reporteDetVO.setCampo18(rst.getString("CAMPO18"));
						}
						if (atriEspecificos.indexOf("CAMPO19") != -1) {
							reporteDetVO.setCampo19(rst.getString("CAMPO19"));
						}
						if (atriEspecificos.indexOf("CAMPO20") != -1) {
							reporteDetVO.setCampo20(rst.getString("CAMPO20"));
						}
					}
					if (tamanolatriEsp > 20) {
						if (atriEspecificos.indexOf("CAMPO21") != -1) {
							reporteDetVO.setCampo21(rst.getString("CAMPO21"));
						}
						if (atriEspecificos.indexOf("CAMPO22") != -1) {
							reporteDetVO.setCampo22(rst.getString("CAMPO22"));
						}
						if (atriEspecificos.indexOf("CAMPO23") != -1) {
							reporteDetVO.setCampo23(rst.getString("CAMPO23"));
						}
						if (atriEspecificos.indexOf("CAMPO24") != -1) {
							reporteDetVO.setCampo24(rst.getString("CAMPO24"));
						}
						if (atriEspecificos.indexOf("CAMPO25") != -1) {
							reporteDetVO.setCampo25(rst.getString("CAMPO25"));
						}
						if (atriEspecificos.indexOf("CAMPO26") != -1) {
							reporteDetVO.setCampo26(rst.getString("CAMPO26"));
						}
						if (atriEspecificos.indexOf("CAMPO27") != -1) {
							reporteDetVO.setCampo27(rst.getString("CAMPO27"));
						}
						if (atriEspecificos.indexOf("CAMPO28") != -1) {
							reporteDetVO.setCampo28(rst.getString("CAMPO28"));
						}
						if (atriEspecificos.indexOf("CAMPO29") != -1) {
							reporteDetVO.setCampo29(rst.getString("CAMPO29"));
						}
						if (atriEspecificos.indexOf("CAMPO30") != -1) {
							reporteDetVO.setCampo30(rst.getString("CAMPO30"));
						}
					}
					if (tamanolatriEsp > 30) {
						if (atriEspecificos.indexOf("CAMPO31") != -1) {
							reporteDetVO.setCampo31(rst.getString("CAMPO31"));
						}
						if (atriEspecificos.indexOf("CAMPO32") != -1) {
							reporteDetVO.setCampo32(rst.getString("CAMPO32"));
						}
						if (atriEspecificos.indexOf("CAMPO33") != -1) {
							reporteDetVO.setCampo33(rst.getString("CAMPO33"));
						}
						if (atriEspecificos.indexOf("CAMPO34") != -1) {
							reporteDetVO.setCampo34(rst.getString("CAMPO34"));
						}
						if (atriEspecificos.indexOf("CAMPO35") != -1) {
							reporteDetVO.setCampo35(rst.getString("CAMPO35"));
						}
						if (atriEspecificos.indexOf("CAMPO36") != -1) {
							reporteDetVO.setCampo36(rst.getString("CAMPO36"));
						}
						if (atriEspecificos.indexOf("CAMPO37") != -1) {
							reporteDetVO.setCampo37(rst.getString("CAMPO37"));
						}
						if (atriEspecificos.indexOf("CAMPO38") != -1) {
							reporteDetVO.setCampo38(rst.getString("CAMPO38"));
						}
						if (atriEspecificos.indexOf("CAMPO39") != -1) {
							reporteDetVO.setCampo39(rst.getString("CAMPO39"));
						}
						if (atriEspecificos.indexOf("CAMPO40") != -1) {
							reporteDetVO.setCampo40(rst.getString("CAMPO40"));
						}
					}
					if (tamanolatriEsp > 40) {
						if (atriEspecificos.indexOf("CAMPO41") != -1) {
							reporteDetVO.setCampo41(rst.getString("CAMPO41"));
						}
						if (atriEspecificos.indexOf("CAMPO42") != -1) {
							reporteDetVO.setCampo42(rst.getString("CAMPO42"));
						}
						if (atriEspecificos.indexOf("CAMPO43") != -1) {
							reporteDetVO.setCampo43(rst.getString("CAMPO43"));
						}
						if (atriEspecificos.indexOf("CAMPO44") != -1) {
							reporteDetVO.setCampo44(rst.getString("CAMPO44"));
						}
						if (atriEspecificos.indexOf("CAMPO45") != -1) {
							reporteDetVO.setCampo45(rst.getString("CAMPO45"));
						}
						if (atriEspecificos.indexOf("CAMPO46") != -1) {
							reporteDetVO.setCampo46(rst.getString("CAMPO46"));
						}
						if (atriEspecificos.indexOf("CAMPO47") != -1) {
							reporteDetVO.setCampo47(rst.getString("CAMPO47"));
						}
						if (atriEspecificos.indexOf("CAMPO48") != -1) {
							reporteDetVO.setCampo48(rst.getString("CAMPO48"));
						}
						if (atriEspecificos.indexOf("CAMPO49") != -1) {
							reporteDetVO.setCampo49(rst.getString("CAMPO49"));
						}
						if (atriEspecificos.indexOf("CAMPO50") != -1) {
							reporteDetVO.setCampo50(rst.getString("CAMPO50"));
						}
					}
				}
				if (tamanolatriEsp > 50) {
					if (atriEspecificos.indexOf("CAMPO51") != -1) {
						reporteDetVO.setCampo51(rst.getString("CAMPO51"));
					}
					if (atriEspecificos.indexOf("CAMPO52") != -1) {
						reporteDetVO.setCampo52(rst.getString("CAMPO52"));
					}
					if (atriEspecificos.indexOf("CAMPO53") != -1) {
						reporteDetVO.setCampo53(rst.getString("CAMPO53"));
					}
					if (atriEspecificos.indexOf("CAMPO54") != -1) {
						reporteDetVO.setCampo54(rst.getString("CAMPO54"));
					}
					if (atriEspecificos.indexOf("CAMPO55") != -1) {
						reporteDetVO.setCampo55(rst.getString("CAMPO55"));
					}
					if (atriEspecificos.indexOf("CAMPO56") != -1) {
						reporteDetVO.setCampo56(rst.getString("CAMPO56"));
					}
					if (atriEspecificos.indexOf("CAMPO57") != -1) {
						reporteDetVO.setCampo57(rst.getString("CAMPO57"));
					}
					if (atriEspecificos.indexOf("CAMPO58") != -1) {
						reporteDetVO.setCampo58(rst.getString("CAMPO58"));
					}
					if (atriEspecificos.indexOf("CAMPO59") != -1) {
						reporteDetVO.setCampo59(rst.getString("CAMPO59"));
					}
					if (atriEspecificos.indexOf("CAMPO60") != -1) {
						reporteDetVO.setCampo60(rst.getString("CAMPO60"));
					}

					if (tamanolatriEsp > 60) {
						if (atriEspecificos.indexOf("CAMPO61") != -1) {
							reporteDetVO.setCampo61(rst.getString("CAMPO61"));
						}
						if (atriEspecificos.indexOf("CAMPO62") != -1) {
							reporteDetVO.setCampo62(rst.getString("CAMPO62"));
						}
						if (atriEspecificos.indexOf("CAMPO63") != -1) {
							reporteDetVO.setCampo63(rst.getString("CAMPO63"));
						}
						if (atriEspecificos.indexOf("CAMPO64") != -1) {
							reporteDetVO.setCampo64(rst.getString("CAMPO64"));
						}
						if (atriEspecificos.indexOf("CAMPO65") != -1) {
							reporteDetVO.setCampo65(rst.getString("CAMPO65"));
						}
						if (atriEspecificos.indexOf("CAMPO66") != -1) {
							reporteDetVO.setCampo66(rst.getString("CAMPO66"));
						}
						if (atriEspecificos.indexOf("CAMPO67") != -1) {
							reporteDetVO.setCampo67(rst.getString("CAMPO67"));
						}
						if (atriEspecificos.indexOf("CAMPO68") != -1) {
							reporteDetVO.setCampo68(rst.getString("CAMPO68"));
						}
						if (atriEspecificos.indexOf("CAMPO69") != -1) {
							reporteDetVO.setCampo69(rst.getString("CAMPO69"));
						}
						if (atriEspecificos.indexOf("CAMPO70") != -1) {
							reporteDetVO.setCampo70(rst.getString("CAMPO70"));
						}
					}
					if (tamanolatriEsp > 70) {
						if (atriEspecificos.indexOf("CAMPO71") != -1) {
							reporteDetVO.setCampo71(rst.getString("CAMPO71"));
						}
						if (atriEspecificos.indexOf("CAMPO72") != -1) {
							reporteDetVO.setCampo72(rst.getString("CAMPO72"));
						}
						if (atriEspecificos.indexOf("CAMPO73") != -1) {
							reporteDetVO.setCampo73(rst.getString("CAMPO73"));
						}
						if (atriEspecificos.indexOf("CAMPO74") != -1) {
							reporteDetVO.setCampo74(rst.getString("CAMPO74"));
						}
						if (atriEspecificos.indexOf("CAMPO75") != -1) {
							reporteDetVO.setCampo75(rst.getString("CAMPO75"));
						}
						if (atriEspecificos.indexOf("CAMPO76") != -1) {
							reporteDetVO.setCampo76(rst.getString("CAMPO76"));
						}
						if (atriEspecificos.indexOf("CAMPO77") != -1) {
							reporteDetVO.setCampo77(rst.getString("CAMPO77"));
						}
						if (atriEspecificos.indexOf("CAMPO78") != -1) {
							reporteDetVO.setCampo78(rst.getString("CAMPO78"));
						}
						if (atriEspecificos.indexOf("CAMPO79") != -1) {
							reporteDetVO.setCampo79(rst.getString("CAMPO79"));
						}
						if (atriEspecificos.indexOf("CAMPO80") != -1) {
							reporteDetVO.setCampo80(rst.getString("CAMPO80"));
						}
					}
					if (tamanolatriEsp > 80) {
						if (atriEspecificos.indexOf("CAMPO81") != -1) {
							reporteDetVO.setCampo81(rst.getString("CAMPO81"));
						}
						if (atriEspecificos.indexOf("CAMPO82") != -1) {
							reporteDetVO.setCampo82(rst.getString("CAMPO82"));
						}
						if (atriEspecificos.indexOf("CAMPO83") != -1) {
							reporteDetVO.setCampo83(rst.getString("CAMPO83"));
						}
						if (atriEspecificos.indexOf("CAMPO84") != -1) {
							reporteDetVO.setCampo84(rst.getString("CAMPO84"));
						}
						if (atriEspecificos.indexOf("CAMPO85") != -1) {
							reporteDetVO.setCampo85(rst.getString("CAMPO85"));
						}
						if (atriEspecificos.indexOf("CAMPO86") != -1) {
							reporteDetVO.setCampo86(rst.getString("CAMPO86"));
						}
						if (atriEspecificos.indexOf("CAMPO87") != -1) {
							reporteDetVO.setCampo87(rst.getString("CAMPO87"));
						}
						if (atriEspecificos.indexOf("CAMPO88") != -1) {
							reporteDetVO.setCampo88(rst.getString("CAMPO88"));
						}
						if (atriEspecificos.indexOf("CAMPO89") != -1) {
							reporteDetVO.setCampo89(rst.getString("CAMPO89"));
						}
						if (atriEspecificos.indexOf("CAMPO90") != -1) {
							reporteDetVO.setCampo90(rst.getString("CAMPO90"));
						}
					}
					if (tamanolatriEsp > 90) {
						if (atriEspecificos.indexOf("CAMPO91") != -1) {
							reporteDetVO.setCampo91(rst.getString("CAMPO91"));
						}
						if (atriEspecificos.indexOf("CAMPO92") != -1) {
							reporteDetVO.setCampo92(rst.getString("CAMPO92"));
						}
						if (atriEspecificos.indexOf("CAMPO93") != -1) {
							reporteDetVO.setCampo93(rst.getString("CAMPO93"));
						}
						if (atriEspecificos.indexOf("CAMPO94") != -1) {
							reporteDetVO.setCampo94(rst.getString("CAMPO94"));
						}
						if (atriEspecificos.indexOf("CAMPO95") != -1) {
							reporteDetVO.setCampo95(rst.getString("CAMPO95"));
						}
						if (atriEspecificos.indexOf("CAMPO96") != -1) {
							reporteDetVO.setCampo96(rst.getString("CAMPO96"));
						}
						if (atriEspecificos.indexOf("CAMPO97") != -1) {
							reporteDetVO.setCampo97(rst.getString("CAMPO97"));
						}
						if (atriEspecificos.indexOf("CAMPO98") != -1) {
							reporteDetVO.setCampo98(rst.getString("CAMPO98"));
						}
						if (atriEspecificos.indexOf("CAMPO99") != -1) {
							reporteDetVO.setCampo99(rst.getString("CAMPO99"));
						}
						if (atriEspecificos.indexOf("CAMPO100") != -1) {
							reporteDetVO.setCampo100(rst.getString("CAMPO100"));
						}
					}
				}
			}

			reporteDetVO.setFechaBeneficio(rst.getString("FECHA_BENEFICIO"));
			// reporteDetVO.setFechaBeneficio(rst.getString("TIPO_BENEFICIO"));
			reporteDetVO.setTipoBeneficio(rst.getString("TIPO_BENEFICIO"));
			reporteDetVO.setValor(rst.getInt("VALOR"));
			reporteDetVO.setEdad(rst.getString("EDAD"));

			beneficiarios.add(reporteDetVO);
		}

		cf.closeConnection(conn);
		conn = null;

		return beneficiarios;
	}

	/*
	 * public Collection getReporte(List lBeneficioOtorg, Collection
	 * atributosGenericos, Collection atributosEspecificos, Collection filtros)
	 * throws SQLException { Collection beneficiosOtorgados = new LinkedList();
	 * RepDetBOTVO bot = null; for(int i=0;i<lBeneficioOtorg.size();i++) {
	 * RepDetBeneficiarioVO objrdbVO =
	 * (RepDetBeneficiarioVO)lBeneficioOtorg.get(i); bot = new RepDetBOTVO();
	 * bot.setNombrePrograma(objrdbVO.getNombrePrograma());
	 * bot.setCodeSubprograma(objrdbVO.getCodeSubprograma());
	 * bot.setNombreSubprograma(objrdbVO.getNombreSubprograma());
	 * bot.setCodeSede(objrdbVO.getCodeSede());
	 * bot.setNombreSede(objrdbVO.getNombreSede());
	 * bot.setFechabeneotorgado(objrdbVO.getFechabeneotorgado());
	 * bot.setCodeBOT(objrdbVO.getCodebenotorgado());
	 * 
	 * conn = cf.getConnection();
	 * bot.setAtributosGenerales(getAtributosGenerales(atributosGenericos,
	 * objrdbVO.getCodebenotorgado(),objrdbVO.getCodebeneficiario() ,filtros));
	 * cf.closeConnection(conn); conn = null;
	 * 
	 * if(atributosEspecificos != null && atributosEspecificos.size() != 0) {
	 * conn = cf.getConnection();
	 * bot.setAtributosEspecificos(getAtributosEspecificos(atributosEspecificos,
	 * objrdbVO.getCodeSubprograma(), objrdbVO.getCodeSede(),
	 * objrdbVO.getCodebenotorgado(), objrdbVO.getCodebeneficiario(),filtros));
	 * 
	 * cf.closeConnection(conn); conn = null; }else { checkFiltersEsp = true; }
	 * if(checkFiltersEsp && checkFiltersGen) { beneficiosOtorgados.add(bot); }
	 * bot = null; checkFiltersEsp = false; checkFiltersGen = false;
	 * 
	 * }
	 * 
	 * return beneficiosOtorgados; }
	 */

	/*
	 * private Collection getAtributosGenerales(Collection atributosGenericos,
	 * Long codeBOT, Long codeBen, Collection filtros) throws SQLException {
	 * Collection repAtributos = new LinkedList(); List atr =
	 * (List)atributosGenericos; boolean vflex = false; boolean barrio = false;
	 * boolean zona = false; boolean comuna = false; String query = "select ";
	 * RepAtributoVO atrVO = null; for(int i = 0; i< atr.size(); i++) { atrVO =
	 * (RepAtributoVO)atr.get(i); String nombre = atrVO.getNombre();
	 * if(nombre.equals("TIPO_DOCUMENTO")) { query +=
	 * " decode(ben."+nombre+",'C','Cedula de ciudadania', "+
	 * " 'E','Cedula de extranjeria', 'N','Nit', 'P','Pasaporte', "+
	 * " 'R','Registro civil','T','Tarjeta de identidad','O','Otro', "+
	 * " 'I','NIP','U','NUIP','S','NISE','A','Cabildo',ben."
	 * +nombre+") TIPO_DOCUMENTO,"; }else if(nombre.equals("ETNIA")) { query +=
	 * " nvl(decode(ben."+nombre+",'A','Afrocolombiano', "+
	 * " 'I','Indigena','O','Otro', "+ "ben."+nombre+"),' ') ETNIA,"; }else
	 * if(nombre.equals("SEXO")) { query +=
	 * " nvl(decode(ben."+nombre+",'F','Femenino', "+
	 * " 'M','Masculino' ,ben."+nombre+"),' ') SEXO,"; }else
	 * if(nombre.equals("VFL_CODIGO_BARRIO")) { query +=
	 * " vflexBarrio.descripcion VFL_CODIGO_BARRIO, "; barrio = true; vflex =
	 * true; }else if(nombre.equals("VFL_CODIGO_ZONA")) { query +=
	 * " vflexZona.descripcion VFL_CODIGO_ZONA, "; zona = true; vflex = true;
	 * }else if(nombre.equals("VFL_CODIGO_COMUNA")) { query +=
	 * " vflexComuna.descripcion VFL_CODIGO_COMUNA, "; comuna = true; vflex =
	 * true; }else if(nombre.equals("FECHA_NACIMIENTO")) { query +=
	 * " nvl(to_char(ben.FECHA_NACIMIENTO,'DD/MM/RRRR'),' ') FECHA_NACIMIENTO, "
	 * ; }else if(nombre.equals("FE_ENCUESTA_SISBEN")){ query +=
	 * " nvl(to_char(ben.FE_ENCUESTA_SISBEN,'DD/MM/RRRR'),' ') FE_ENCUESTA_SISBEN, "
	 * ; }else{ query += "nvl(ben."+nombre+",' ') "+nombre+" ,"; } } if(!vflex)
	 * { query += "to_char(rownum) numero "+ "from tcs_ben_beneficiario ben, "+
	 * "       tcs_ben_beneficio_otorgado bot "+
	 * " where bot.BEN_CODIGO = ben.CODIGO "+
	 * " AND bot.FECHA_BENEFICIO <= sysdate "+ " and bot.CODIGO = "+codeBOT+
	 * " and ben.codigo = "+codeBen+ checkFiltros(filtros); }else { query +=
	 * "to_char(rownum) numero "+ "from tcs_ben_beneficiario ben, ";
	 * 
	 * if(barrio) { query += " paoyer.tcs_valor_flexible vflexBarrio, "; }
	 * if(zona) { query += " paoyer.tcs_valor_flexible vflexZona, "; }
	 * if(comuna) { query += " paoyer.tcs_valor_flexible vflexComuna, "; } query
	 * += " tcs_ben_beneficio_otorgado bot "+
	 * " where bot.BEN_CODIGO = ben.CODIGO "+
	 * " AND bot.FECHA_BENEFICIO <= sysdate "+ " and bot.CODIGO = "+codeBOT+
	 * " and ben.codigo = "+codeBen+ checkFiltros(filtros); if(barrio) { query
	 * += " and vflexBarrio.CODIGO (+)= VFL_CODIGO_BARRIO"; } if(zona) { query
	 * += " and vflexZona.CODIGO (+)= VFL_CODIGO_ZONA"; } if(comuna) { query +=
	 * " and vflexComuna.CODIGO (+)= VFL_CODIGO_COMUNA"; }
	 * 
	 * } //System.out.println(query); ResultSet rst =
	 * cf.getRecordsRset(query,null,conn);
	 * 
	 * RepAtributoVO atributo = null;
	 * 
	 * while(rst.next()) { for(int i = 0; i< atr.size(); i++) { checkFiltersGen
	 * = true; atrVO = (RepAtributoVO)atr.get(i); atributo = new
	 * RepAtributoVO(); atributo.setNumeroAtributo(i+1);
	 * atributo.setNombre(atrVO.getEtiqueta());
	 * atributo.setValor(rst.getString(i+1)); repAtributos.add(atributo); } }
	 * rst.close(); if(atr.size() == 0) checkFiltersGen = true;
	 * 
	 * return repAtributos; }
	 */

	public Integer getCantidadBeneficiarios(List filtros, ConnectionFactory cf,
			RepDetBOTVO criterea) throws SQLException {
		cf.closeConnection(conn);

		String filtrosGenerales = "'" + checkFiltros((Collection) filtros)
				+ "'";
		String filtrosEspecificos = null;
		if (criterea.getCodigoAtrGestor() != null
				&& criterea.getGestor() != null) {
			filtrosEspecificos = "'"
					+ checkFiltrosEspecificos((Collection) filtros)
					+ " AND NVL(Fcs_Ben_Valor_Atributo("
					+ criterea.getCodigoAtrGestor()
					+ ", "
					+ " bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') = TO_CHAR(''"
					+ criterea.getGestor() + "'')'";
		} else {
			filtrosEspecificos = "'"
					+ checkFiltrosEspecificos((Collection) filtros) + "'";
		}

		String Desde = criterea.getDesde();
		String Hasta = criterea.getHasta();

		if (Desde != null) {
			Desde = "'" + Desde + "'";
		}
		if (Hasta != null) {
			Hasta = "'" + Hasta + "'";
		}

		conn = cf.getConnection();

		String strSql = "{call beneficios.PCS_CANTIDAD_BENEFICIARIOS(" + ""
				+ filtrosGenerales + "," + filtrosEspecificos + ", "
				+ criterea.getCodeSede() + ", " + criterea.getCodeSubprograma()
				+ ", null, " + Desde + ", " + Hasta + ", ?)}";

		CallableStatement stmt = conn.prepareCall(strSql);
		stmt.registerOutParameter(1, OracleTypes.CURSOR);
		stmt.execute();

		ResultSet rst = (ResultSet) stmt.getObject(1);

		rst.next();

		return (new Integer(rst.getInt(1)));

	}

	public Long getValorTotal(List filtros, ConnectionFactory cf,
			RepDetBOTVO criterea) throws SQLException {
		cf.closeConnection(conn);

		String filtrosGenerales = "'" + checkFiltros((Collection) filtros)
				+ "'";
		String filtrosEspecificos = null;
		if (criterea.getCodigoAtrGestor() != null
				&& criterea.getGestor() != null) {
			filtrosEspecificos = "'"
					+ checkFiltrosEspecificos((Collection) filtros)
					+ " AND NVL(Fcs_Ben_Valor_Atributo("
					+ criterea.getCodigoAtrGestor()
					+ ", "
					+ " bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') = TO_CHAR(''"
					+ criterea.getGestor() + "'')'";
		} else {
			filtrosEspecificos = "'"
					+ checkFiltrosEspecificos((Collection) filtros) + "'";
		}

		String Desde = criterea.getDesde();
		String Hasta = criterea.getHasta();

		if (Desde != null) {
			Desde = "'" + Desde + "'";
		}
		if (Hasta != null) {
			Hasta = "'" + Hasta + "'";
		}

		conn = cf.getConnection();

		String strSql = "{call beneficios.PCS_VALOR_BENEFICIOS(" + ""
				+ filtrosGenerales + "," + filtrosEspecificos + ", "
				+ criterea.getCodeSede() + ", " + criterea.getCodeSubprograma()
				+ ", null, " + Desde + ", " + Hasta + ", ?)}";

		CallableStatement stmt = conn.prepareCall(strSql);
		stmt.registerOutParameter(1, OracleTypes.CURSOR);
		stmt.execute();

		ResultSet rst = (ResultSet) stmt.getObject(1);

		rst.next();

		return (new Long(rst.getLong(1)));

	}

	public Collection getAtributosEspecificos(Collection atributosEspecificos,
			Long codeSubprograma, Long codeSede, Long codeBOT, Long codeBen/*
																			 * ,
																			 * Collection
																			 * filtros
																			 */)
			throws SQLException {
		Collection repAtributos = new LinkedList();
		List atr = (List) atributosEspecificos;
		RepAtributoVO atrVO = null;
		String query = "SELECT rownum numeroAtributo, atr.NOMBRE nombreAtributo, "
				+ "nvl(fcs_ben_valor_atributo(atr.codigo, bot.codigo, "
				+ codeBen
				+ ", bot.FECHA_BENEFICIO),' ') valor "
				+ "from tcs_ben_beneficiario ben, "
				+ "tcs_ben_subprograma sub, "
				+ "tcs_ben_beneficio_otorgado bot, "
				+ "tcs_ben_subp_atr_beneficiario atr, "
				+ "tcs_ben_sede sede "
				+ "WHERE  ben.codigo = bot.ben_codigo "
				+ "AND sub.codigo = bot.sbpr_codigo "
				+ "AND bot.FECHA_BENEFICIO <= sysdate "
				+ "AND sub.codigo = atr.sbpr_codigo "
				+ "AND sede.codigo = bot.sede_codigo "
				+ "AND sub.codigo = "
				+ codeSubprograma
				+ " AND sede.codigo = "
				+ codeSede
				+ " AND bot.codigo = "
				+ codeBOT
				+ " AND ben.codigo = "
				+ codeBen;
		if (atr.size() > 0)
			query += " AND atr.codigo in (";

		for (int i = 0; i < atr.size(); i++) {
			atrVO = (RepAtributoVO) atr.get(i);
			query += atrVO.getCodigo().toString() + ",";
		}
		if (atr.size() > 0)
			query += "0) ";
		/*
		 * if((Object)filtros != null) { List lFiltros = (List)filtros;
		 * CondicionConsultaVO filtro= null; int cont_filtro = 0; for(int
		 * i=0;i<lFiltros.size();i++) { filtro =
		 * (CondicionConsultaVO)lFiltros.get(i);
		 * if(filtro.getOrigen().equals("E")) { cont_filtro++; } }
		 * if(cont_filtro>0) query +=
		 * " and bot.codigo in ("+checkFiltros(filtros
		 * ,codeSede,codeSubprograma,codeBen)+")"; }
		 */
		query += " order by ben.codigo, numeroAtributo";

		// System.out.println(query);
		ResultSet rst = cf.getRecordsRset(query, null, conn);
		RepAtributoVO atributo = null;
		while (rst.next()) {
			checkFiltersEsp = true;
			atributo = new RepAtributoVO();
			atributo.setNumeroAtributo(rst.getInt("numeroAtributo"));
			atributo.setNombre(rst.getString("nombreAtributo"));
			atributo.setValor(rst.getString("valor"));
			repAtributos.add(atributo);
		}
		rst.close();
		if (atr.size() == 0)
			repAtributos = null;
		return repAtributos;
	}

	public String checkFiltros(Collection filtros) {
		List lFiltros = (List) filtros;
		CondicionConsultaVO filtro = null;
		String retorno = "";
		if ((Object) filtros != null) {
			for (int i = 0; i < lFiltros.size(); i++) {
				filtro = (CondicionConsultaVO) lFiltros.get(i);
				String operador = filtro.getCodfiltro();
				String tipoDato = filtro.getTipocampo();

				if (filtro.getOrigen().equals("G")) {
					retorno += " and ";
					if (tipoDato.equals("N")) {
						if (operador.equals("=")) {
							retorno += " ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor();
						} else if (operador.equals("<>")) {
							retorno += " ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor();
						} else if (operador.equals("<=")) {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor();
						} else if (operador.equals(">=")) {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor();
						} else if (operador.equals("<")) {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor();
						} else if (operador.equals(">")) {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor();
						} else {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor()
									+ " and " + filtro.getValor2();
						}

					} else if (tipoDato.equals("F")) {

						if (operador.equals("between") || operador.equals("=")) {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " to_date(''"
									+ filtro.getValor()
									+ "'', ''DD/MM/RRRR'') and to_date(''"
									+ filtro.getValor2()
									+ "'', ''DD/MM/RRRR'')";

						} else {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " to_date(''"
									+ filtro.getValor() + "'', ''DD/MM/RRRR'')";
						}

					} else if (tipoDato.equals("A") || tipoDato.equals("L")) {
						if (operador.equals("=")) {
							retorno += " UPPER(ben." + filtro.getCodcampo()
									+ " ) " + operador + " ''"
									+ filtro.getValor().toUpperCase() + "''";
						} else if (operador.equals("<>")) {
							retorno += " UPPER(ben." + filtro.getCodcampo()
									+ " ) " + operador + " ''"
									+ filtro.getValor().toUpperCase() + "''";
						} else if (operador.equals("like")) {
							retorno += " UPPER(ben." + filtro.getCodcampo()
									+ " ) " + operador + " ''%"
									+ filtro.getValor().toUpperCase() + "%''";
						}
					} else {
						if (operador.equals("=")) {
							retorno += " ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "''";
						} else if (operador.equals("<>")) {
							retorno += " ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "''";
						} else if (operador.equals("<=")) {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "''";
						} else if (operador.equals(">=")) {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "''";
						} else if (operador.equals("<")) {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "''";
						} else if (operador.equals(">")) {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "''";
						} else {
							retorno += "ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "'' and ''" + filtro.getValor2() + "''";
						}
					}
				}
			}
		}
		// System.out.println("retorno " + retorno);
		return retorno;
	}

	public String checkFiltrosEspecificos(Collection filtros)
			throws SQLException {
		List lFiltros = (List) filtros;
		CondicionConsultaVO filtro = null;
		String retorno = "";
		if ((Object) filtros != null) {
			for (int i = 0; i < lFiltros.size(); i++) {
				filtro = (CondicionConsultaVO) lFiltros.get(i);
				if (filtro.getOrigen().equals("E")) {
					if (filtro.getCodfiltro().equals("=")) {
						retorno += " AND NVL(Fcs_Ben_Valor_Atributo("
								+ filtro.getCodcampo()
								+ ", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') = TO_CHAR(''"
								+ filtro.getValor().toUpperCase() + "'') ";
					} else if (filtro.getCodfiltro().equals("<>")) {
						retorno += " AND NVL(Fcs_Ben_Valor_Atributo("
								+ filtro.getCodcampo()
								+ ", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') <> TO_CHAR(''"
								+ filtro.getValor().toUpperCase() + "'') ";
					} else if (filtro.getCodfiltro().equals("<=")) {
						retorno += " AND NVL(Fcs_Ben_Valor_Atributo("
								+ filtro.getCodcampo()
								+ ", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') <= TO_CHAR(''"
								+ filtro.getValor() + "'') ";
					} else if (filtro.getCodfiltro().equals(">=")) {
						retorno += " AND NVL(Fcs_Ben_Valor_Atributo("
								+ filtro.getCodcampo()
								+ ", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') >= TO_CHAR(''"
								+ filtro.getValor() + "'') ";
					} else if (filtro.getCodfiltro().equals("<")) {
						retorno += " AND NVL(Fcs_Ben_Valor_Atributo("
								+ filtro.getCodcampo()
								+ ", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') < TO_CHAR(''"
								+ filtro.getValor() + "'') ";
					} else if (filtro.getCodfiltro().equals(">")) {
						retorno += " AND NVL(Fcs_Ben_Valor_Atributo("
								+ filtro.getCodcampo()
								+ ", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') > TO_CHAR(''"
								+ filtro.getValor() + "'') ";
					} else if (filtro.getCodfiltro().equals("between")) {
						retorno += " AND NVL(Fcs_Ben_Valor_Atributo("
								+ filtro.getCodcampo()
								+ ", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') between TO_CHAR(''"
								+ filtro.getValor() + "'') AND TO_CHAR(''"
								+ filtro.getValor2() + "'')";
					} else if (filtro.getCodfiltro().equals("like")) {
						retorno += " AND NVL(Fcs_Ben_Valor_Atributo("
								+ filtro.getCodcampo()
								+ ", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') LIKE TO_CHAR(UPPER(''%"
								+ filtro.getValor() + "%''))";
					}
				}
			}
		}
		return retorno;
	}

	public RepDetBOTVO getFilters(RepDetBOTVO criterea) throws SQLException {
		String strQuery = null;
		ResultSet rst = null;
		conn = cf.getConnection();

		if (criterea.getCodeSede() != null) {
			strQuery = "SELECT NOMBRE" + " FROM TCS_BEN_SEDE"
					+ " WHERE CODIGO = " + criterea.getCodeSede();
			rst = cf.getRecordsRset(strQuery, null, conn);
			rst.next();

			criterea.setNombreSede(rst.getString("NOMBRE"));
		}

		if (criterea.getCodeSubprograma() != null) {
			strQuery = "SELECT NOMBRE" + " FROM TCS_BEN_SUBPROGRAMA"
					+ " WHERE CODIGO = " + criterea.getCodeSubprograma();
			rst = cf.getRecordsRset(strQuery, null, conn);
			rst.next();

			criterea.setNombreSubprograma(rst.getString("NOMBRE"));

			strQuery = "SELECT prog.NOMBRE NOMBRE"
					+ " FROM TCS_BEN_SUBPROGRAMA sub, TCS_BEN_PROGRAMA prog"
					+ " WHERE sub.prg_codigo = prog.CODIGO "
					+ " AND sub.CODIGO = " + criterea.getCodeSubprograma();
			rst = cf.getRecordsRset(strQuery, null, conn);
			rst.next();

			criterea.setNombrePrograma(rst.getString("NOMBRE"));
		}

		if (rst != null)
			rst.close();

		return criterea;
	}

	/*
	 * public String checkFiltros(Collection filtros, Long codeSede, Long
	 * codeSubpro, Long codeBen) throws SQLException { List lFiltros =
	 * (List)filtros; CondicionConsultaVO filtro= null; String retorno="";
	 * Vector vRetorno = new Vector(); int Estado = 0; boolean noCumple = false;
	 * for(int i=0;i<lFiltros.size();i++) { filtro =
	 * (CondicionConsultaVO)lFiltros.get(i); if(filtro.getOrigen().equals("E"))
	 * { String strSQL = "SELECT bot.codigo codigo "+
	 * "FROM TCS_BEN_BENEFICIARIO ben, TCS_BEN_SUBPROGRAMA sub, "+
	 * "TCS_BEN_BENEFICIO_OTORGADO bot, TCS_BEN_SUBP_ATR_BENEFICIARIO atr, TCS_BEN_SEDE sede "
	 * + "WHERE  ben.codigo = bot.ben_codigo "+
	 * "AND sub.codigo = bot.sbpr_codigo "+
	 * "AND bot.FECHA_BENEFICIO <= sysdate "+
	 * "AND sub.codigo = atr.sbpr_codigo "+
	 * "AND sede.codigo = bot.sede_codigo "+ "AND sub.codigo = "+codeSubpro+
	 * " AND ben.codigo = "+codeBen+ " AND sede.codigo = "+codeSede;
	 * 
	 * if(filtro.getCodfiltro().equals("=")) { strSQL +=
	 * " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') = TO_CHAR('"
	 * +filtro.getValor()+"') "+ " AND atr.codigo = "+filtro.getCodcampo();
	 * }else if(filtro.getCodfiltro().equals("<>")) { strSQL +=
	 * " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') <> TO_CHAR('"
	 * +filtro.getValor()+"') "+ " AND atr.codigo = "+filtro.getCodcampo();
	 * }else if(filtro.getCodfiltro().equals("<=")) { strSQL +=
	 * " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') <= TO_CHAR('"
	 * +filtro.getValor()+"') "+ " AND atr.codigo = "+filtro.getCodcampo();
	 * }else if(filtro.getCodfiltro().equals(">=")) { strSQL +=
	 * " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') >= TO_CHAR('"
	 * +filtro.getValor()+"') "+ " AND atr.codigo = "+filtro.getCodcampo();
	 * }else if(filtro.getCodfiltro().equals("<")) { strSQL +=
	 * " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') < TO_CHAR('"
	 * +filtro.getValor()+"') "+ " AND atr.codigo = "+filtro.getCodcampo();
	 * }else if(filtro.getCodfiltro().equals(">")) { strSQL +=
	 * " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') > TO_CHAR('"
	 * +filtro.getValor()+"') "+ " AND atr.codigo = "+filtro.getCodcampo();
	 * }else if(filtro.getCodfiltro().equals("between")) { strSQL +=
	 * " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') between TO_CHAR('"
	 * +filtro.getValor()+"') AND TO_CHAR('"+filtro.getValor2()+"')"+
	 * " AND atr.codigo = "+filtro.getCodcampo(); }
	 * 
	 * ResultSet rst = cf.getRecordsRset(strSQL,null,conn); if(rst.next()) {
	 * if(!noCumple) { vRetorno.add(rst.getString("codigo")); } }else {
	 * vRetorno.removeAllElements(); noCumple = true; } } } if(vRetorno.size() >
	 * 0) { for(int k=0;k<vRetorno.size();k++) { retorno+=vRetorno.get(k)+",";
	 * 
	 * } retorno+= "0"; }else { retorno+= "0"; }
	 * 
	 * return retorno; }
	 */

	/*
	 * public static void main(String[] args) { ConnectionFactory cf = new
	 * ConnectionFactory("beneficios","beneficios"); RepDetBOTVO criterea = new
	 * RepDetBOTVO(); criterea.setCodeSede(new Long("255"));
	 * criterea.setCodeSubprograma(new Long("274")); Collection
	 * atributosGenericos = new LinkedList(); RepAtributoVO atrVO = new
	 * RepAtributoVO(); atrVO.setNombre("TIPO_DOCUMENTO");
	 * atrVO.setEtiqueta("TIPO DOCUMENTO"); atributosGenericos.add(atrVO); atrVO
	 * = new RepAtributoVO(); atrVO.setNombre("NUMERO_DOCUMENTO");
	 * atrVO.setEtiqueta("NUMERO DOCUMENTO"); atributosGenericos.add(atrVO);
	 * atrVO = new RepAtributoVO(); atrVO.setNombre("PRIMER_NOMBRE");
	 * atrVO.setEtiqueta("PRIMER NOMBRE"); atributosGenericos.add(atrVO); atrVO
	 * = new RepAtributoVO(); atrVO.setNombre("VFL_CODIGO_BARRIO");
	 * atrVO.setEtiqueta("BARRIO"); atributosGenericos.add(atrVO); Collection
	 * atributosEspecificos = new LinkedList(); atrVO = new RepAtributoVO();
	 * atrVO.setCodigo(new Long(1285)); atributosEspecificos.add(atrVO); atrVO =
	 * new RepAtributoVO(); atrVO.setCodigo(new Long(1286));
	 * atributosEspecificos.add(atrVO); atrVO = new RepAtributoVO();
	 * atrVO.setCodigo(new Long(1288)); atributosEspecificos.add(atrVO);
	 * 
	 * Collection filtros = new LinkedList(); CondicionConsultaVO filtro = new
	 * CondicionConsultaVO(); filtro.setCampo("NUMERO_DOCUMENTO");
	 * filtro.setCodfiltro("="); filtro.setValor("71265414");
	 * filtro.setTipocampo("N"); filtro.setOrigen("G"); filtros.add(filtro);
	 * 
	 * filtro = new CondicionConsultaVO(); filtro.setCodcampo("SEXO");
	 * filtro.setCodfiltro("="); filtro.setValor("M"); filtro.setTipocampo("A");
	 * filtro.setOrigen("G"); filtros.add(filtro);
	 * 
	 * //Filtro especifico filtro = new CondicionConsultaVO();
	 * filtro.setCodcampo("1285"); filtro.setCodfiltro(">");
	 * filtro.setValor("15"); filtro.setTipocampo("N"); filtro.setOrigen("E");
	 * filtros.add(filtro);
	 * 
	 * 
	 * RepDetBOTDAO BOTDAO = new RepDetBOTDAO(cf); try{ List reporte =
	 * (List)BOTDAO.getReporte(criterea,atributosGenericos,atributosEspecificos,
	 * filtros); for(int i=0;i<reporte.size();i++) { RepDetBOTVO bot =
	 * (RepDetBOTVO)reporte.get(i); List atrGene =
	 * (List)bot.getAtributosGenerales(); for(int j = 0; j< atrGene.size();j++)
	 * { RepAtributoVO atr = (RepAtributoVO)atrGene.get(j);
	 * //System.out.print(atr.getNumeroAtributo()+" - ");
	 * //System.out.print(atr.getNombre()+" - "); } List atrEspe =
	 * (List)bot.getAtributosEspecificos(); for(int j = 0; j<
	 * atrEspe.size();j++) { RepAtributoVO atr = (RepAtributoVO)atrEspe.get(j);
	 * //System.out.print(atr.getNumeroAtributo()+" - ");
	 * //System.out.print(atr.getNombre()+" - "); } }
	 * cf.closeConnection(BOTDAO.getConn()); }catch(SQLException e) {
	 * e.printStackTrace(); } }
	 */

	public Connection getConn() {
		return conn;
	}
}